// https://github.com/klover2/wechatpay-node-v3-ts
// https://wechatpay-api.gitbook.io/wechatpay-api-v3/

const mongoose = require('mongoose');

const { Schema } = mongoose;

const name = 'WxPayTransactionsJsapi';

const schema = new Schema({
  hotel_id: String,  // 酒店id, 系统生成
  comfirm_number: [String], // 确认号
  resv_name_id: [String], // 确认号
  primary_comfirm_number: String, //
  primary_resv_name_id: String, //
  appid: String, // 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，例如公众号场景下，需使用应用属性为公众号的服务号APPID 示例值：wxd678efh567hg6787
  mchid: String, // 直连商户的商户号，由微信支付生成并下发。 示例值：1230000109
  description: String, // 商品描述 示例值：Image形象店-深圳腾大-QQ公仔
  out_trade_no: String, // 商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一 示例值：1217752501201407033233368018
  time_expire: String, // 订单失效时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。 示例值：2018-06-08T10:34:56+08:00
  attach: String, // 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。 示例值：自定义数据  
  notify_url: String, // 异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 公网域名必须为https，如果是走专线接入，使用专线NAT IP或者私有回调域名可使用http 示例值：https://www.weixin.qq.com/wxpay/pay.php
  goods_tag: String, // 订单优惠标记.示例值：WXG
  support_fapiao: Boolean, // 传入true时，支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能，传此字段才可生效。true：是 false：否 示例值：true
  amount: { // 订单金额信息
    total: Number, // 订单总金额，单位为分。
    currency: String // 货币类型	CNY：人民币，境内商户号仅支持人民币。
  },
  payer: { // 支付者信息
    openid: String, // 用户在直连商户appid下的唯一标识。 下单前需获取到用户的Openid，Openid获取详见 示例值：oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
  },
  detail: { // 优惠功能
    cost_price: Number, // 订单原价
    invoice_id: String, // 商家小票ID
    goods_detail: [{ // 单品列表信息 条目个数限制：【1，6000】
      merchant_goods_id: String, // 商户侧商品编码	由半角的大小写字母、数字、中划线、下划线中的一种或几种组成。示例值：1246464644
      wechatpay_goods_id: String, // 微信支付商品编码	微信支付定义的统一商品编号（没有可不传） 示例值：1001
      goods_name: String, // 商品的实际名称 示例值：iPhoneX 256G
      quantity: Number, // 用户购买的数量 示例值：1
      unit_price: Number // 商品单价，单位为分 示例值：828800
    }]
  },
  scene_info: { // 场景信息 支付场景描述
    payer_client_ip: String, // 用户的客户端IP，支持IPv4和IPv6两种格式的IP地址。 示例值：14.23.150.211
    device_id: String, // 商户端设备号（门店号或收银设备ID）。 示例值：013467007045764
    store_info: {
      id: String, // 商户侧门店编号 示例值：0001
      name: String, // 商户侧门店名称 示例值：腾讯大厦分店
      area_code: String, // 地区编码，详细请见省市区编号对照表。示例值：440305
      address: String // 详细的商户门店地址 示例值：广东省深圳市南山区科技中一道10000号
    }
  },
  settle_info: { // 结算信息
    profit_sharing: Boolean // 是否指定分账 示例值：false
  },
  prepay_id: String, // 预支付交易会话标识。用于后续接口调用中使用，该值有效期为2小时 示例值：wx201410272009395522657a690389285100
  wxpay: {
    appId: String,
    timeStamp: String,
    nonceStr: String,
    package: String,
    signType: String,
    paySign: String,
  }
}, {
  strict: false,
  optimisticConcurrency: true,
  timestamps: true
});

schema.index({ hotel_id: 1 });
schema.index({ out_trade_no: 1 });

export default mongoose.model(name, schema);
